import java.io.IOException;

import Cliente.Cliente;
import Servidor.Servidor;

import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;

import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Juego {

	private static JFrame tupac = new JFrame();
	static int salir = 0;
	static int maxjug = 0;
	static int numero = 0;
	static String nombre = "";
	
	public Juego() {
		tupac.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tupac.setBounds(100, 100, 633, 455);
		
		JPanel contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		tupac.setContentPane(contentPane);
		contentPane.setLayout(null);
		
		final JPanel panel3juego = new JPanel();
		panel3juego.setBounds(0, 0, 633, 433);
		contentPane.add(panel3juego);
		panel3juego.setLayout(null);
		
		JPanel panel3jbot = new JPanel();
		panel3jbot.setBounds(0, 344, 633, 89);
		panel3juego.add(panel3jbot);
		panel3jbot.setBorder(new MatteBorder(3, 2, 2, 2, (Color) new Color(0, 0, 0)));
		panel3jbot.setBackground(Color.GRAY);
		panel3jbot.setLayout(null);
		
		JButton btnAceptarJug = new JButton("Aceptar");
		btnAceptarJug.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		btnAceptarJug.setBounds(255, 24, 117, 46);
		panel3jbot.add(btnAceptarJug);
		
		JPanel panel4 = new JPanel();
		panel4.setBounds(0, 0, 633, 343);
		panel3juego.add(panel4);
		panel4.setLayout(null);
		
		JLabel lblNewLabel4 = new JLabel("Modo jugador");
		lblNewLabel4.setFont(new Font("Marker Felt", Font.PLAIN, 19));
		lblNewLabel4.setBounds(32, 25, 233, 44);
		panel4.add(lblNewLabel4);
		
		JSeparator separator4 = new JSeparator();
		separator4.setBounds(19, 59, 597, 12);
		panel4.add(separator4);
		
		JLabel lblNewLabel_4 = new JLabel("N\u00BA de jugador:");
		lblNewLabel_4.setFont(new Font("Marker Felt", Font.PLAIN, 15));
		lblNewLabel_4.setBounds(66, 135, 103, 16);
		panel4.add(lblNewLabel_4);
		
		JLabel lblNewLabel_3 = new JLabel("Nombre:");
		lblNewLabel_3.setFont(new Font("Marker Felt", Font.PLAIN, 15));
		lblNewLabel_3.setBounds(66, 189, 103, 16);
		panel4.add(lblNewLabel_3);
		
		JLabel lblimagenj3 = new JLabel("");
		lblimagenj3.setBounds(445, 83, 130, 167);
		panel4.add(lblimagenj3);
		
		ImageIcon im3 = new ImageIcon(getClass().getResource("logo3.png"));
		Image img3 = im3.getImage();
        Image ni3 = img3.getScaledInstance(lblimagenj3.getWidth(), lblimagenj3.getHeight(),  java.awt.Image.SCALE_SMOOTH);
        im3.setImage(ni3);
        lblimagenj3.setIcon(im3);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setBounds(328, 238, 1, 12);
		panel4.add(separator_2);
		
		final JTextField textFieldNum = new JTextField();
		textFieldNum.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		textFieldNum.setBounds(181, 129, 50, 28);
		panel4.add(textFieldNum);
		textFieldNum.setColumns(10);
		
		final JTextField textFieldName = new JTextField();
		textFieldName.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		textFieldName.setBounds(181, 183, 134, 28);
		panel4.add(textFieldName);
		textFieldName.setColumns(10);
		
		final Cargando panelCargando = new Cargando();
		contentPane.add(panelCargando);
		panelCargando.setVisible(false);
		
		btnAceptarJug.addActionListener(
			new ActionListener() { 
				@Override
				public void actionPerformed(ActionEvent arg0) {
					// TODO Auto-generated method stub
					try {
						numero = Integer.parseInt(textFieldNum.getText());
						nombre = textFieldName.getText();
								
						panelCargando.setNombre(nombre,"" + numero);
						
						panel3juego.setVisible(false);
						panelCargando.setVisible(true);
						
						salir = 2;
					} catch (Exception e) {
							// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
		    } // fin de la clase interna
		);
		
		panel3juego.setVisible(false);
		
		final JPanel panel2juego = new JPanel();
		panel2juego.setBounds(0, 0, 633, 433);
		contentPane.add(panel2juego);
		panel2juego.setLayout(null);
		
		JPanel panel2jbot = new JPanel();
		panel2jbot.setBounds(0, 344, 633, 89);
		panel2juego.add(panel2jbot);
		panel2jbot.setBorder(new MatteBorder(3, 2, 2, 2, (Color) new Color(0, 0, 0)));
		panel2jbot.setBackground(Color.GRAY);
		panel2jbot.setLayout(null);
		
		JButton btnAceptarSer = new JButton("Aceptar");
		btnAceptarSer.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		btnAceptarSer.setBounds(255, 24, 117, 46);
		panel2jbot.add(btnAceptarSer);
		
		JPanel panel2j = new JPanel();
		panel2j.setBounds(0, 0, 633, 343);
		panel2juego.add(panel2j);
		panel2j.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Modo servidor");
		lblNewLabel.setFont(new Font("Marker Felt", Font.PLAIN, 19));
		lblNewLabel.setBounds(32, 25, 233, 44);
		panel2j.add(lblNewLabel);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(19, 59, 597, 12);
		panel2j.add(separator);
		
		JLabel lblNewLabel_1 = new JLabel("N\u00BA de jugadores:");
		lblNewLabel_1.setFont(new Font("Marker Felt", Font.PLAIN, 15));
		lblNewLabel_1.setBounds(66, 135, 103, 16);
		panel2j.add(lblNewLabel_1);
		
		JLabel lblNewLabel_2 = new JLabel("N\u00BA de preguntas:");
		lblNewLabel_2.setFont(new Font("Marker Felt", Font.PLAIN, 15));
		lblNewLabel_2.setBounds(66, 189, 103, 16);
		panel2j.add(lblNewLabel_2);
		
		SpinnerNumberModel model = new SpinnerNumberModel(2,2,10,1); 
		final JSpinner spinner = new JSpinner(model);
		spinner.setBounds(181, 123, 56, 28);
		panel2j.add(spinner);
		
		btnAceptarSer.addActionListener(
			new ActionListener() { 
				@Override
				public void actionPerformed(ActionEvent arg0) {
					// TODO Auto-generated method stub
					try {
						maxjug = (Integer) spinner.getValue();
							
						salir = 1;
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
		    } // fin de la clase interna
		);
		
		JLabel lblimagenj2 = new JLabel("");
		lblimagenj2.setBounds(445, 83, 130, 167);
		panel2j.add(lblimagenj2);
		
		ImageIcon im2 = new ImageIcon(getClass().getResource("logo2.png"));
		Image img2 = im2.getImage();
        Image ni2 = img2.getScaledInstance(lblimagenj2.getWidth(), lblimagenj2.getHeight(),  java.awt.Image.SCALE_SMOOTH);
        im2.setImage(ni2);
        lblimagenj2.setIcon(im2);
		
        SpinnerNumberModel model2 = new SpinnerNumberModel(2,1,30,1); 
		JSpinner spinner_1 = new JSpinner(model2);
		spinner_1.setBounds(181, 177, 56, 28);
		panel2j.add(spinner_1);
		
		JLabel lblTipoDeJuego = new JLabel("Tipo de juego:");
		lblTipoDeJuego.setFont(new Font("Marker Felt", Font.PLAIN, 15));
		lblTipoDeJuego.setBounds(66, 243, 104, 16);
		panel2j.add(lblTipoDeJuego);
		
		JComboBox comboBox = new JComboBox();
		comboBox.setModel(new DefaultComboBoxModel(new String[] {"Elija el modo de juego", "Mayor puntuaci\u00F3n", "Mejor de cinco", "Mejor de diez"}));
		comboBox.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		comboBox.setBounds(181, 239, 157, 27);
		panel2j.add(comboBox);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(328, 238, 1, 12);
		panel2j.add(separator_1);
		
		panel2juego.setVisible(false);
		
		final JPanel panel1juego = new JPanel();
		panel1juego.setBackground(Color.LIGHT_GRAY);
		panel1juego.setBounds(0, 0, 633, 433);
		contentPane.add(panel1juego);
		panel1juego.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBackground(Color.LIGHT_GRAY);
		panel.setBorder(UIManager.getBorder("InsetBorder.aquaVariant"));
		panel.setBounds(21, 23, 591, 308);
		panel1juego.add(panel);
		panel.setLayout(null);
		
		JLabel label = new JLabel("");
		label.setBackground(Color.LIGHT_GRAY);
		label.setBounds(6, 6, 579, 296);
		panel.add(label);
		
		
		ImageIcon im = new ImageIcon(getClass().getResource("logo.png"));
		Image img = im.getImage();
        Image ni = img.getScaledInstance(label.getWidth(), label.getHeight(),  java.awt.Image.SCALE_SMOOTH);
        im.setImage(ni);
		label.setIcon(im);
		
		JPanel panel_2 = new JPanel();
		panel_2.setBorder(new MatteBorder(3, 2, 2, 2, (Color) new Color(0, 0, 0)));
		panel_2.setBackground(Color.GRAY);
		panel_2.setBounds(0, 344, 633, 89);
		panel1juego.add(panel_2);
		panel_2.setLayout(null);
		
		JButton btnCrear = new JButton("Crear partida");
		btnCrear.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		btnCrear.setBounds(39, 10, 160, 67);
		panel_2.add(btnCrear);
		
		btnCrear.addActionListener(
			new ActionListener() { 
				@Override
				public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
					try {
						panel1juego.setVisible(false);
						panel2juego.setVisible(true);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
		    } // fin de la clase interna
		);
		
		JButton btnUnirse = new JButton("Unirse a una partida");
		btnUnirse.setBounds(430, 10, 160, 67);
		btnUnirse.setFont(new Font("Marker Felt", Font.PLAIN, 13));
		panel_2.add(btnUnirse);		
		
		btnUnirse.addActionListener(
			new ActionListener() { 
				@Override
				public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
					try {
						panel1juego.setVisible(false);
						panel3juego.setVisible(true);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
		    } // fin de la clase interna
		);
		
		tupac.setVisible(true);
	}
	
	private static void CrearServidor(int maxjugadores) throws Exception {
		tupac.setVisible(false);
		Servidor aplicacion = new Servidor(9999, maxjugadores);
		aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		aplicacion.esperarPaquetes();		
	}	

	private static void CrearCliente (int NumJugador, String nombre) throws IOException, ClassNotFoundException {
		tupac.setVisible(false);
		//Para las pruebas en casa poner "localhost" y en la facultad "exthost.etsii.ull.es"
		Cliente aplicacion = new Cliente(9999, NumJugador, "localhost", nombre);
		aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		aplicacion.siempreVisibible();
		aplicacion.esperarPaquetes();
	}
	
	public static void main(String args[]) throws Exception {
		new Juego();
		
		while (true) {
			if (salir != 0)
				break;
			
			System.out.println("");
		}
		
		if (salir == 2) {
			Thread.sleep(3000);
		}
		
		
		switch (salir) {
			case 1: CrearServidor(maxjug);
					break;
					
			case 2: CrearCliente(numero, nombre);
					break;
		}
		    
		System.out.println("Fin de la partida.");		    
	} // main

}
